import re,json,random,time


from tools.captcha.captcha import captcha
from tools.myredis import r
from tools.comm import sendMsg
from tools.myjwt import mjwt
from flask import Blueprint,request,jsonify,make_response
from application.models.users.user import *
user_blue = Blueprint("userblue",__name__)

# @user_blue.route("/reg")
# def reg():
#     res = User.query.all()
#     print(res)
#     return '欢迎使用flask'

# 测试
@user_blue.route("/test")
def test():
    return jsonify({
        "code":200,
        "mes":"mes"
    })

# 获取图片验证码
@user_blue.route("/getcode")
def getcode():
    # 生成图片验证码,text文字，image图片流
    name,text,image = captcha.generate_captcha()
    # 从页面获取uuid作为redis key
    uuid = str(request.args.get('uuid'))
    # 存入redis
    r.str_add(uuid,str(text),60)
    # 以流的方式生成图片验证码
    res = make_response(image)
    res.headers["Content-Type"] = "image/jpg"
    return res

# 发送短信验证码
@user_blue.route("/sendSmsCode",methods=['POST'])
def sendSmsCode():
    data = request.data
    if data:
        data = json.loads(data)
    # 获取3个参数
    uuid = data["uuid"]
    piccode = data['piccode']
    mobile = data['mobile']
    # 通过uuid查询redis
    value = r.str_get(uuid)
    if value:
        # 两个验证码对比，如果成功调用短信平台发送短信
        if piccode.lower() == value.lower():
            # 验证1分钟内只能发一次
            mcode = r.str_get(mobile)
            if mcode:
                return jsonify({
                    "code":10011,
                    "mes":"一分钟内不能重复发"
                })
            # 生成5位随机数
            scode = random.randint(10000,99999)
            # 调用短信平台
            flag = sendMsg(mobile,scode)
            if flag == True:
                # 存入redis
                r.str_add(mobile,scode,60)
                # 删除图片验证码
                r.del_str(uuid)
                # 返回结果
                return jsonify({
                    "code":200,
                    "mes":"发送成功"
                })
            else:
                return jsonify({
                    "code":10013,
                    "mes":"发送验证码失败"
                })
        else:
            return jsonify({
                "code":10012,
                "mes":"图片验证码错误"
            })
        # 失败返回错误信息
    else:
        return jsonify({
            "code":10010,
            "mes":"图片验证码不存在"
        })

# 注册登陆接口
@user_blue.route("/reg",methods=['POST'])
def login():
    # 获取参数，手机号，验证码
    data = request.data
    if data:
        data = json.loads(data)
        # 获取3个参数
        mcode = data['code']
        mobile = data['mobile']
        # 根据手机号去redis获取验证码
        code = r.str_get(mobile)
        if code:
            # 验证码是否相同,如果不相同返回错误信息
            if int(code) == int(mcode):
                # 如果相同查询数据库user表
                # 如果存在返回用户信息
                # 如果不存在写入用户表
                user = User.query.filter_by(User.mobile==mobile).first()
                if user:
                    # 删除redis中的验证码
                    r.del_str(mobile)
                else:
                    u = User(mobile=mobile)
                    db.session.add(u)
                    db.session.commit()
                    user = User.query.filter_by(User.mobile == mobile).first()
                    # 用用户信息生成jwt token
                    token = mjwt.jwt_encode(data={"data":{"uid":user.id,"exp":int(time.time())}})
                    return jsonify({
                        "code":200,
                        "token":token,
                        "userid":user.id
                    })
                    # 返回给页面
            else:
                return jsonify({
                    "code":10020,
                    "mes":"验证码错误"
                })
        else:
            return jsonify({
                "code":10021,
                "mes":"登陆成功"
            })

@user_blue.route("/cart",methods=['POST'])
def cart():
    pass



